From fa44cb8b5f60ebc13fc60be96c37d4e654545547 Mon Sep 17 00:00:00 2001 From: "robertlipe@gmail.com" Date: Wed, 23 Oct 2013 18:40:27 +0000 Subject: [PATCH] Fix various leaks introduced in the non-NEW_STRING case when refactoring surrounding code to be more Qt-ish. git-svn-id: http://gpsbabel.googlecode.com/svn/trunk@4642 f51c46e8-681c-474f-0cfe-069cfd0219fb --- gpsbabel/compegps.cc | 7 ++++--- gpsbabel/csv_util.cc | 5 ++++- gpsbabel/garmin_gpi.cc | 7 +++---- gpsbabel/humminbird.cc | 6 ++++-- gpsbabel/maggeo.cc | 2 +- gpsbabel/pcx.cc | 4 ++-- gpsbabel/stmsdf.cc | 7 ++++--- gpsbabel/tiger.cc | 3 ++- gpsbabel/tpg.cc | 8 ++++---- 9 files changed, 28 insertions(+), 21 deletions(-) diff --git a/gpsbabel/compegps.cc b/gpsbabel/compegps.cc index 43a59c49e..90b90dabe 100644 --- a/gpsbabel/compegps.cc +++ b/gpsbabel/compegps.cc @@ -490,8 +490,8 @@ write_waypt_cb(const waypoint* wpt) if (curr_index != target_index) { return; } - - name = (snlen > 0) ? mkshort_from_wpt(sh, wpt) : csv_stringclean(wpt->shortname, " "); +// NEW_STRING: remove extra ctor below. + name = (snlen > 0) ? mkshort_from_wpt(sh, wpt) : csv_stringclean(QString(wpt->shortname), " "); gbfprintf(fout, "W %s A ", CSTR(name)); gbfprintf(fout, "%.10f%c%c ", @@ -594,7 +594,8 @@ write_trkpt_cb(const waypoint* wpt) if (track_info_flag != 0) { track_info_flag = 0; if (curr_track->rte_name != NULL) { - QString name = csv_stringclean(curr_track->rte_name, "|"); +// NEW_STRING: remove extra ctor below. + QString name = csv_stringclean(QString(curr_track->rte_name), "|"); gbfprintf(fout, "t 4294967295|%s|-1|-1\n", CSTR(name)); } } diff --git a/gpsbabel/csv_util.cc b/gpsbabel/csv_util.cc index dd76398f0..a766aa5ae 100644 --- a/gpsbabel/csv_util.cc +++ b/gpsbabel/csv_util.cc @@ -215,7 +215,10 @@ csv_stringclean(const char* string, const char* chararray) QString csv_stringclean(const QString& string, const char* chararray) { - return csv_stringclean(CSTR(string), chararray); + char *t = csv_stringclean(CSTR(string), chararray); + QString r(t); + xfree(t); + return r; } char* diff --git a/gpsbabel/garmin_gpi.cc b/gpsbabel/garmin_gpi.cc index 1b873f373..c44cd6aab 100644 --- a/gpsbabel/garmin_gpi.cc +++ b/gpsbabel/garmin_gpi.cc @@ -1310,14 +1310,13 @@ enum_waypt_cb(const waypoint* ref) wpt = waypt_dupe(ref); - QString str; if (*opt_unique == '1') { - str = mkshort(short_h, wpt->shortname); #if NEW_STRINGS - wpt->shortname = str; + wpt->shortname = mkshort(short_h, wpt->shortname); #else + char* str = mkshort(short_h, wpt->shortname); xfree(wpt->shortname); - wpt->shortname = xstrdup(str); + wpt->shortname = str; #endif } diff --git a/gpsbabel/humminbird.cc b/gpsbabel/humminbird.cc index bfbdba4a7..51d2776d3 100644 --- a/gpsbabel/humminbird.cc +++ b/gpsbabel/humminbird.cc @@ -725,9 +725,10 @@ humminbird_write_waypoint(const waypoint* wpt) be_write32(&hum.north, si_round(north)); QString name; +// NEW_STRING - remove extra ctor below. name = (global_opts.synthesize_shortnames) ? mkshort_from_wpt(wptname_sh, wpt) - : mkshort(wptname_sh, wpt->shortname); + : mkshort(wptname_sh, QString(wpt->shortname)); memset(&hum.name, 0, sizeof(hum.name)); memcpy(&hum.name, CSTR(name), name.length()); @@ -754,7 +755,8 @@ humminbird_track_head(const route_head* trk) trk_head = (humminbird_trk_header_t*) xcalloc(1, sizeof(humminbird_trk_header_t)); trk_points = (humminbird_trk_point_t*) xcalloc(max_points, sizeof(humminbird_trk_point_t)); - name = mkshort(trkname_sh, trk->rte_name); +// NEW_STRING: remove speare ctor below. + name = mkshort(trkname_sh, QString(trk->rte_name)); strncpy(trk_head->name, CSTR(name), sizeof(trk_head->name)); be_write16(&trk_head->trk_num, trk->rte_num); } diff --git a/gpsbabel/maggeo.cc b/gpsbabel/maggeo.cc index e59460c3e..2db30f658 100644 --- a/gpsbabel/maggeo.cc +++ b/gpsbabel/maggeo.cc @@ -274,7 +274,7 @@ maggeo_waypt_pr(const waypoint* waypointp) #if NEW_STRINGS waypointp->notes.isEmpty() ? waypointp->description : waypointp->notes); #else - waypointp->notes ? waypointp->notes : waypointp->description); + QString(waypointp->notes ? waypointp->notes : waypointp->description)); #endif placer = waypointp->gc_data->placer; diff --git a/gpsbabel/pcx.cc b/gpsbabel/pcx.cc index e938ac17e..c847ff458 100644 --- a/gpsbabel/pcx.cc +++ b/gpsbabel/pcx.cc @@ -364,8 +364,8 @@ pcx_track_hdr(const route_head* trk) route_ctr++; snprintf(buff, sizeof(buff)-1, "Trk%03d", route_ctr); - - QString name = mkshort(mkshort_handle2, (trk->rte_name != NULL) ? trk->rte_name : buff); +// NEW_STRINGS - remove extr ctor below. + QString name = mkshort(mkshort_handle2, (trk->rte_name != NULL) ? QString(trk->rte_name) : buff); /* Carto Exploreur (popular in France) chokes on trackname headers, * so provide option to supppress these. */ diff --git a/gpsbabel/stmsdf.cc b/gpsbabel/stmsdf.cc index eb05bbf2b..fbebe01a3 100644 --- a/gpsbabel/stmsdf.cc +++ b/gpsbabel/stmsdf.cc @@ -130,10 +130,10 @@ parse_header(char* line) is_fatal((ver != 1), MYNAME ": This version '%d' is not yet supported. Please report!", ver); } else if (case_ignore_strcmp(key, "NAME") == 0) { - rte_name = xstrdup(str); + rte_name = str; } else if (case_ignore_strcmp(key, "NOTES") == 0) /* ToDo */; else if (case_ignore_strcmp(key, "SOURCE") == 0) { - rte_desc = xstrdup(str); + rte_desc = str; } else if (case_ignore_strcmp(key, "TYPE") == 0) { filetype = atoi(str); switch (filetype) { @@ -658,7 +658,8 @@ route_disp_wpt_cb(const waypoint* wpt) if (global_opts.synthesize_shortnames) { sn = mkshort_from_wpt(short_h, wpt); } else { - sn = mkshort(short_h, wpt->shortname); +// NEW_STRINGS: eliminate extra ctor below. + sn = mkshort(short_h, QString(wpt->shortname)); } gbfprintf(fout, "\"WP\",\"%s\",%.8lf,%.8lf,%.f\n", CSTR(sn), wpt->latitude, wpt->longitude, ALT(wpt)); diff --git a/gpsbabel/tiger.cc b/gpsbabel/tiger.cc index 1d67f3269..8a64ff647 100644 --- a/gpsbabel/tiger.cc +++ b/gpsbabel/tiger.cc @@ -213,7 +213,8 @@ tiger_disp(const waypoint* wpt) gbfprintf(file_out, "%f,%f:%s", lon, lat, pin.toUtf8().data()); if (!nolabels) { QString temp; - QString desc = csv_stringclean(wpt->description, ":"); +// NEW_STRINGS - eliminate extr ctor below. + QString desc = csv_stringclean(QString(wpt->description), ":"); if (global_opts.synthesize_shortnames) { temp = desc; desc = mkshort(mkshort_whandle, desc); diff --git a/gpsbabel/tpg.cc b/gpsbabel/tpg.cc index 576e2fab5..8d8c4d0ff 100644 --- a/gpsbabel/tpg.cc +++ b/gpsbabel/tpg.cc @@ -207,7 +207,7 @@ tpg_waypt_pr(const waypoint* wpt) shortname = xstrdup(""); } } else { - shortname = xstrdup(wpt->shortname); + shortname = wpt->shortname; } #if NEW_STRINGS if (wpt->description.isEmpty()) { @@ -215,12 +215,12 @@ tpg_waypt_pr(const waypoint* wpt) if (! wpt->description) { #endif if (!shortname.isEmpty()) { - description = xstrdup(shortname); + description = shortname; } else { - description = xstrdup(""); + description = ""; } } else { - description = xstrdup(wpt->description); + description = wpt->description; } /* convert lat/long to NAD27/CONUS datum */ -- 2.30.2